package org.example.backend.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 订单实体类
 */
@Data
@TableName("`order`")
public class Order implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 订单ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 订单编号
     */
    private String orderNo;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 管理员ID（送水员）
     */
    private Long adminId;

    /**
     * 订单总金额
     */
    private BigDecimal totalAmount;

    /**
     * 配送地址
     */
    private String address;

    /**
     * 联系电话
     */
    private String phone;

    /**
     * 订单状态：0-待接单，1-已接单，2-配送中，3-已完成，4-已取消
     */
    private Integer status;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;
    
    /**
     * 订单明细列表（非数据库字段）
     */
    @TableField(exist = false)
    private List<OrderItem> orderItems;
    
    /**
     * 用户信息（非数据库字段）
     */
    @TableField(exist = false)
    private User user;
    
    /**
     * 送水员信息（非数据库字段）
     */
    @TableField(exist = false)
    private Admin deliveryman;
    
    /**
     * 订单状态名称（非数据库字段）
     */
    @TableField(exist = false)
    private String statusName;
    
    /**
     * 获取订单状态名称
     * @return 状态名称
     */
    public String getStatusName() {
        if (status == null) {
            return "";
        }
        switch (status) {
            case 0:
                return "待接单";
            case 1:
                return "已接单";
            case 2:
                return "配送中";
            case 3:
                return "已完成";
            case 4:
                return "已取消";
            default:
                return "未知状态";
        }
    }
} 